/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.muni.fi.diplomka.servicelayer.gamelogic.manager;

import cz.muni.fi.diplomka.servicelayer.dto.CityArmy;
import java.util.List;

/**
 * Interface for manipulating Armies in City
 *
 * @author Jakub Kutil
 */
public interface CityArmyManager {

    /**
     * Adds new City Army
     *
     * @param army City Army to add
     */
    public void addArmy(CityArmy army);

    /**
     * Edits City Army
     *
     * @param army City Army to edit
     */
    public void editArmy(CityArmy army);

    /**
     * Deletes City Army and moves Units to City
     *
     * @param army City Army to delete
     */
    public void deleteArmy(CityArmy army);

    /**
     * Removes only City Army, Units are send away
     *
     * @param army City Army to remove
     */
    public void sendArmy(CityArmy army);

    /**
     * Gets all City Armies in City
     *
     * @param cityId Id of City
     * @return list of City Armies in City
     */
    public List<CityArmy> getArmiesInCity(Long cityId);

    /**
     * Gets list of City Armies in allied Cities send from City
     *
     * @param cityId Id of City of City Armies
     * @return list of all City Armies in allied Cities
     */
    public List<CityArmy> getAwayArmiesFromCity(Long cityId);

    /**
     * Gets City Army guarding specified City
     *
     * @param cityId Id of specified City
     * @return guarding City Army or empty one if no City Army is on guard
     */
    public CityArmy getArmyOnCityWalls(Long cityId);
}
